Jupyterノートブックプロット

Juptyer ノートで pyvista でインタラクティブにプロット!

pythreejs を使ったデモ

pythreejs を使ってインタラクティブな物理ベースのレンダリングを行います。

import pyvista as pv
from pyvista import examples

# download an example and display it using physically based rendering.
mesh = examples.download_lucy()
mesh.plot(color='lightgrey', pbr=True, metallic=0.2,
          jupyter_backend='pythreejs')

ipygany を使ったデモ

from pyvista import demos

# basic glyphs demo
mesh = demos.glyphs(2)

text = demos.logo.text_3d("I'm interactive!", depth=0.2)
text.points *= 0.1
text.translate([0, 1.4, 1.5])
mesh += text
mesh['Example Scalars'] = mesh.points[:, 0]

mesh.plot(cpos='xy', jupyter_backend='ipygany', show_scalar_bar=True)

panel を使ったデモ

from pyvista import demos
demos.plot_logo(jupyter_backend='panel')

サポートされるモジュール

PyVistaモジュールは,Jupyterノートブック内でプロットする際のさまざまなバックエンドをサポートしています:

  • ipyvtklink を介したノートブックへのPyVistaストリーミングによるサーバ側のレンダリング

  • pythreejs を使ったクライアントサイドレンダリング threejs を使ったクライアントサイドレンダリング。

  • threejs を使用した ipygany によるクライアント側レンダリング.

  • vtk.js を使用した panel を使用したクライアント側レンダリング.

  • itk.jsvtk.js を使用した itkwidgets によるクライアント側レンダリング.

  • 静止画像.


各バックエンドの詳細

これらの描画バックエンドの使用方法の詳細については,各バックエンドの個々のパッケージページを参照してください.

3 D対話型Jupyterlabプロットの状態

注釈

Jupyterノートブック内の3 Dプロットは,Jupyterがまだ比較的新しい技術であることもありますが,ここで使用されているWeb技術も新しい技術であり,ますます多くのユーザや開発者がクラウドやクラウドベースのビジュアライゼーションに移行しているため,急速に発展しています.ここにあるものは壊れ,急速に変化する可能性が高いです

これは2021年3月に書かれ、2021年8月に更新されたもので、すでに古くなっている可能性があります。 必ず、開発者のウェブサイトで変更点を確認してください。

Jupyterlabを使用してプロットする場合は,多数のモジュールのいずれかを使用することもできますが,それぞれに長所,短所,および短所があります. pyvistaPlotting クラスを使用するときにAPIの違いのいくつかを取り除こうとしますが,プロットはバックエンドによって異なるように見えます.また,バックエンドが異なると要件も異なり,展開環境をサポートしない場合があります.

次の表に,jupyterノートブックプロットモジュールで使用されるさまざまな機能とテクノロジを示します.

Jupyterノートブック3 Dモジュール

Jupyterlab 3

レンダリングの場所

バックエンド

フレームバッファが必要

panel

Yes

クライアント

vtk.js

Yes

pythreejs

Yes

クライアント

threejs

いいえ

ipygany

Yes

クライアント

threejs

いいえ

ipyvtklink

Yes

サーバ

vtk

Yes

itkwidgets

いいえ

クライアント

vtk.js

Yes

現時点では, itkwidgetsipyvtklink はJupyterlab 3と互換性がなく,juptyerで "Error displaying widget: model not found" というメッセージが表示されます.さらに ipyganypythreejs 以外のモジュールはすべてフレームバッファを必要とします.これは pyvista.start_xvfb() を使ったヘッドレス環境で設定できます.しかし,システムパッケージをインストールできないGoogle Colabでは, システムパッケージをインストールすることができないので、サーバーサイドレンダリングやフレームバッファを必要としない threejs のようなモジュールを使うべきです。

フレームバッファを必要とするバックエンドのためのヘッドレス環境へのインストールの詳細については, インストール を参照してください.個々のパッケージをインストールする場合,簡単な pip install <package> を使用してJupyterlab 3互換パッケージをインストールできます.詳細は,他のパッケージのインストール手順を参照してください.

PyVistaでの使用法

jupyterのプロッティングバックエンドを設定するには2つの方法があります。 まず、 Plotter.show()dataset.plot()``jupyter_backend` パラメータを設定することで、プロットごとに設定することができます。 また、 pyvista.set_jupyter_backend() でグローバルに設定することもできます。 詳細はこちらをご覧ください。

set_jupyter_backend(backend)

Jupyterノートブックのプロットバックエンドを設定します.

パラメータ
backendstr

プロット時に使用するJupyterバックエンドです.次のいずれかである必要があります.

  • 'ipyvtklink' : リモートでレンダリングし,結果のVTKイメージをクライアントにストリーミングします.すべてのVTKメソッドをサポートしますが,リモートレンダリングのために遅延が発生します.ヘッドレスサーバーで表示する場合は,仮想フレームバッファをセットアップする必要があります. ipyvtklink がインストールされている必要があります.

  • 'panel' : VTKレンダーウィンドウをvtkjsオブジェクトに変換し,それをjupyterlabで視覚化します.ほとんどのVTKオブジェクトをサポートします.ヘッドレスサーバーで表示する場合は,仮想フレームバッファをセットアップする必要があります. panel がインストールされている必要があります.

  • 'ipygany' : すべてのメッシュを ipygany メッシュに変換し,クライアント側でレンダリングするメッシュをストリーミングします.VTKメッシュをサポートしていますが,他にはほとんどありません. none を除き,これは仮想フレームバッファを必要としない唯一の方法です. ipygany がインストールされている必要があります.

  • 'pythreejs'`` : すべてのメッシュを pythreejs のメッシュに変換し、それらをストリームしてクライアント側でレンダリングします。 ipygany を除けば、この方法は仮想フレームバッファを必要としない唯一の方法です。 必ず pythreejs がインストールされている必要があります。

  • 'static' : Jupyterlab環境内に単一の静的イメージを表示します.ヘッドレスサーバーで表示する場合も仮想フレームバッファをセットアップする必要がありますが,追加のモジュールをインストールする必要はありません.

  • 'none' : jupyterlab内にプロットを表示せず,専用のVTKレンダリングウィンドウを使用して表示します.これは,仮想フレームバッファがあっても,ヘッドレスサーバー上では何も生成しません.

pythreejsバックエンドを有効にします.

>>> import pyvista as pv
>>> pv.set_jupyter_backend('pythreejs')  

ipygany バックエンドを有効にします.

>>> import pyvista as pv
>>> pv.set_jupyter_backend('ipygany')  

panelバックエンドを有効にします.

>>> pv.set_jupyter_backend('panel')  

ipyvtklink バックエンドを有効にします.

>>> pv.set_jupyter_backend('ipyvtklink')  

静止画像を表示するだけです.

>>> pv.set_jupyter_backend('static')  

JupyterLab内のすべてのプロットを無効にし,準のデスクトップVTKレンダリングウィンドウを使用して表示します.

>>> pv.set_jupyter_backend(None)  # or 'none'